package cn.wuxing.mediation.infoconfig.service;

import cn.wuxing.mediation.common.core.domain.TreeSelect;
import cn.wuxing.mediation.common.core.domain.entity.IcMediatorCommittee;
import cn.wuxing.mediation.infoconfig.domain.dto.AddMediatorCommitteeUserDTO;
import cn.wuxing.mediation.infoconfig.domain.dto.RemoveMediatorCommitteeUserDTO;
import cn.wuxing.mediation.infoconfig.domain.vo.MediatorCommitteeUserVO;
import java.util.List;

/**
 * 调解委员会管理 服务层
 *
 * @author mediation
 */
public interface IIcMediatorCommitteeService {

    /**
     * 查询调解委员会管理数据
     *
     * @param icMediatorCommittee 调解委员会信息
     * @return 调解委员会信息集合
     */
    public List<IcMediatorCommittee> selectMediatorCommitteeList(IcMediatorCommittee icMediatorCommittee);

    /**
     * 查询调解委员会树结构信息
     *
     * @param icMediatorCommittee 调解委员会信息
     * @return 调解委员会树信息集合
     */
    public List<TreeSelect> selectMediatorCommitteeTreeList(IcMediatorCommittee icMediatorCommittee);

    /**
     * 调解委员会树形下拉框
     *
     * @param icMediatorCommittee
     * @return
     */
    List<TreeSelect> selectMediatorCommitteeTreeDropDown(IcMediatorCommittee icMediatorCommittee);

    /**
     * 构建前端所需要树结构
     *
     * @param icMediatorCommitteesi 调解委员会列表
     * @return 树结构列表
     */
    public List<IcMediatorCommittee> buildMediatorCommitteeTree(List<IcMediatorCommittee> icMediatorCommitteesi);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param icMediatorCommittee 调解委员会列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildMediatorCommitteeTreeSelect(List<IcMediatorCommittee> icMediatorCommittee);

    /**
     * 根据调解委员会ID查询信息
     *
     * @param id 调解委员会ID
     * @return 调解委员会信息
     */
    public IcMediatorCommittee selectCommitteeById(Long id);

    /**
     * 根据ID查询所有子调解委员会（正常状态）
     *
     * @param id ID
     * @return 子调解委员会数
     */
    public int selectNormalChildrenById(Long id);

    /**
     * 是否存在调解委员会子节点
     *
     * @param id 调解委员会ID
     * @return 结果
     */
    public boolean hasChildById(Long id);

    /**
     * 查询调解委员会是否存在用户
     *
     * @param dto 调解委员会
     * @return 结果 true 存在 false 不存在
     */
    public boolean checkMediatorCommitteeExistUser(AddMediatorCommitteeUserDTO dto);

    /**
     * 校验调解委员会名称是否唯一
     *
     * @param icMediatorCommittee 调解委员会信息
     * @return 结果
     */
    public boolean checkCommitteeNameUnique(IcMediatorCommittee icMediatorCommittee);

    /**
     * 新增保存调解委员会信息
     *
     * @param icMediatorCommittee 调解委员会信息
     * @return 结果
     */
    public int insertMediatorCommittee(IcMediatorCommittee icMediatorCommittee);

    /**
     * 修改保存调解委员会信息
     *
     * @param icMediatorCommittee 调解委员会信息
     * @return 结果
     */
    public int updateMediatorCommittee(IcMediatorCommittee icMediatorCommittee);

    /**
     * 删除调解委员会管理信息
     *
     * @param id 调解委员会ID
     * @return 结果
     */
    public int deleteById(Long id);

    /**
     * 获取调解委员会内人员
     *
     * @param mediatorCommitteeId
     * @return
     */
    List<MediatorCommitteeUserVO> getMediatorCommitteeUserList(String name, Long mediatorCommitteeId);

    /**
     * 新增调解委员会用户
     *
     * @param dto
     */
    void addMediatorCommitteeUser(AddMediatorCommitteeUserDTO dto);

    /**
     * 移除调解委员会用户
     *
     * @param dto
     */
    void removeMediatorCommitteeUser(RemoveMediatorCommitteeUserDTO dto);

    /**
     * 获取委员会名称
     *
     * @param mediatorCommitteeId
     * @return
     */
    String getMediatorCommitteeName(Long mediatorCommitteeId);
}
